Java网络编程:Socket和WebSocket |
您所在的位置:网站首页 › python web和java web区别 › Java网络编程:Socket和WebSocket |
一、Socket总结
1.1、Socket简介 在计算机通信领域,Socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定。通过 Socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 ![]()
图中可以看到Socket是应用层与TCP/IP协议族通信的中间软件抽象层,就是提供了tcp/ip协议的抽象,对外提供了一套接口,同过这个接口就可以统一方便的使用tcp/ip协议的功能。 1.2、Socket常用方法图解 ![]() 1.3、Socket网络通信流程 ![]() 1.4、Java中Socket使用举例 在Java中,我们使用Socket有两种,一个是基于TCP的Socket,一个是基于UDP的DatagramSocket,本篇只分析基于TCP的Socket。现在我们来看Socket的使用: 客户端:指明主机端口创建Socket,获取输出流,写入数据。 Socket socket = null; OutputStream os = null; try { socket = new Socket("192.168.1.106",9200); os = socket.getOutputStream(); os.write("hello server !".getBytes()); } catch (IOException e) { e.printStackTrace(); }finally { try { if(os != null){ os.close(); } if(socket != null){ socket.close(); } } catch (IOException e) { e.printStackTrace(); } }服务端:指明绑定的端口,创建ServerSocket,开启端口监听。 ServerSocket serverSocket; try { serverSocket = new ServerSocket(9200); } catch (IOException e) { return; } while (isRunning){ try { Socket client = serverSocket.accept(); handleClient(client); } catch (IOException e) { e.printStackTrace(); } } try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); }这里只是一个简单的示例,当然实际开发中可能需要更多的东西,比如在handleClient(client)处理数据的时候加入线程池去处理,以及client的关闭等,这里只是简单的使用。 二、WebSocket总结2.1、WebSocket简介 WebSocket 是 HTML5 一种新的应用层协议,它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯。 在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 在此WebSocket 协议中,为我们实现通讯服务带来了两大好处: a. Header 互相沟通的Header是很小的-大概只有 2 Bytes b. Server Push 服务器可以主动传送数据给客户端 2.2、WebSocket作用 WebSocket可以实现网站即时通讯技术,替代轮询 网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力实现即时通讯通常是采用轮询、Comet技术解决。 HTTP协议是非持久化的,单工的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器。这样的方法最明显的缺点就是需要不断的发送请求,而且通常HTTP request的Header是非常长的,为了传输一个很小的数据 需要付出巨大的代价,是很不合算的,占用了很多的宽带。而最比较新的技术去做轮询的效果是Comet – 用了AJAX。但这种技术虽然可达到全双工通信,但依然需要发出请求。 然而WebSocket全双工通信协议的出现可以弥补这一缺点。在WebSocket中,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。 2.3、WebSocket与Socket的区别 Socket其实并不是一个协议,就是提供了tcp/ip协议的抽象,对外提供了一套接口,通过这个接口就可以统一方便的使用tcp/ip协议的功能。 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 WebSocket则是Html5开始提供的一个典型的应用层协议,可以用来实现网站的即时通讯。
补充:现在一些手机即时通讯app基本都是通过XMPP协议来实现的,服务器端比如 Netty + openfire等等。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |